﻿/**************************************************
 * 文 件 名：DbHelperFactory.cs
 * 版    本：V1.0
 * 创 建 人：杨书林
 * 日    期：2011-7-9
 * 说    明：各类DbHelper的工厂类
 
 * 修 改 人：
 * 日    期：
 * 描    述：
 **************************************************/
using System.Configuration;

namespace Ysl.Data.DbHelper
{
    internal sealed class DbHelperFactory
    {
        /// <summary>
        /// 默认数据库连接名称
        /// </summary>
        private static readonly string defaultConnectionName = "DefaultConnectionName";

        /// <summary>
        /// 静态构造函数获取数据库连接名称（ConnectionName）
        /// 
        /// 获取数据库连接名称优先级为：
        /// 1、先从<appSettings><add key="DefaultConnectionName" value="数据库连接名称"/></appSettings>中获取ConnectionName
        /// 2、如果未找到，再从<connectionStrings><add name="DefaultConnectionName" connectionString="连接字符串" providerName="数据提供程序名" /></connectionStrings>中获取默认数据库连接
        /// 3、如果未找到默认数据库连接，就把<connectionStrings><clear/><add name="" connectionString="" providerName="" /></connectionStrings>中第一个数据库连接作为默认数据库连接，些时需要添加<clear/>,避免继承父配置文件
        /// </summary>
        static DbHelperFactory()
        {
            if (ConfigurationManager.AppSettings[defaultConnectionName] != null)
            {
                //先从<appSettings><add key="DefaultConnectionName" value="数据库连接名称"/></appSettings>中获取ConnectionName
                defaultConnectionName = ConfigurationManager.AppSettings[defaultConnectionName];
            }
            else if (ConfigurationManager.ConnectionStrings[defaultConnectionName] == null)
            {
                //如果未找到默认数据库连接，就把<connectionStrings><clear/><add name="" connectionString="" providerName="" /></connectionStrings>中第一个数据库连接作为默认数据库连接，些时需要添加<clear/>,避免继承父配置文件
                defaultConnectionName = ConfigurationManager.ConnectionStrings[0].Name;
            }
        }

        /// <summary>
        /// 使用工厂方法创建IDbHelper对象
        /// </summary>
        /// <returns></returns>
        internal static IDbHelper CreateDbHelper()
        {
            return CreateDbHelper(defaultConnectionName);
        }

        /// <summary>
        /// 使用工厂方法创建IDbHelper对象
        /// </summary>
        /// <param name="connectionName">连接名称</param>
        /// <returns>返回IDbHelper类型</returns>
        internal static IDbHelper CreateDbHelper(string connectionName)
        {
            IDbHelper dbHelper = null;

            ConnectionStringSettings connection = ConfigurationManager.ConnectionStrings[connectionName];
            if (connection != null)
            {
                string providerName = connection.ProviderName;
                string connectionString = connection.ConnectionString;

                switch (providerName)
                {
                    case DbProviderNames.System_Data_SqlClient:
                        dbHelper = new SqlHelper(connectionString);
                        break;
                    /*
                case DbProviderNames.System_Data_OracleClient:
                    dbHelper = new OracleHelper(connectionString);
                    break;
                case DbProviderNames.System_Data_OleDb:
                    dbHelper = new OleDbHelper(connectionString);
                    break;
                case DbProviderNames.Oracle_DataAccess_Client:
                    dbHelper = new OracleHelper(connectionString);
                    break;
                case DbProviderNames.MySql_Data_MySqlClient:
                    dbHelper = new MySqlHelper(connectionString);
                    break;
                case DbProviderNames.System_Data_SQLite:
                    dbHelper = new SQLiteHelper(connectionString);
                    break;
                     */
                }
            }

            return dbHelper;
        }


    }

}
